Git Commit
✒️ 2025-07-26 20:38 내용 수정
특정 시점에 대한 스냅샷
- Git에서 새 Commit을 생성하면 프로젝트의 특정 시점을 저장한다.
- Git의 Commit을 사용하여 history를 추적할 수 있고, 다른 개발자와 협력 시 코드 관리를 효과적으로 처리할 수 있다.
- hisotry를 추적할 수 있기에 이전 버전으로 되돌릴 수 있다.
Commit 구조
- 커밋 → 트리(Tree) → BLOB(파일 내용) 참조 구조
- 파일 내용을 Git 객체(blob)로 저장한다.
- 객체 식별자인 SHA-1 해시를 생성한다.
- 커밋은 Tree 객체를 참조하며, 그 Tree가 BLOB 객체들을 참조한다.
기본 흐름
git add로 변경된 파일을 staging area에 올린다.
# 변경된 파일 전체를 staging area에 추가
git add .
# 일부만 추가
git add <filename>
git commit으로 staging된 변경 사항을 commit으로 저장한다.
git commit
- 메시지 추가 시
-m옵션을 사용한다.
git commit -m "initial commit"
Commit 옵션
| 옵션 | 설명 | 사용 예시 |
|---|---|---|
-m, --message |
커밋 메시지를 바로 입력. 메시지가 없으면 편집기 오픈 |
git commit -m "Fix bug" |
-a, --all |
추적 중인(tracked) 수정/삭제된 파일 자동 staging → 바로 커밋 (새 파일 제외) | git commit -a -m "Update files" |
-am 조합 |
-a와 -m 조합 커맨드로 staging 없이 커밋 메시지 포함 커밋 |
git commit -am "Quick update" |
--amend |
가장 최근 커밋 내용을 수정 (새 커밋이 아닌 이전 커밋 덮어쓰기) |
git add file && git commit --amend -m "Updated" |
--no-edit |
--amend와 함께 사용하여 메시지 편집 없이 내용만 수정 |
git commit --amend --no-edit |
-p, --patch |
interactive 모드로 커밋할 변경 hunk를 수동 선택 | git commit -p -m "Selective commit" |
--reuse-message/-C |
기존 커밋 메시지와 author 정보를 재사용 | git commit -C <commit> |
--reedit-message/-c |
기존 메시지를 편집해서 새 커밋 생성 | git commit -c <commit> |
--fixup |
특정 커밋을 정정하는 "fixup!" 커밋 생성 (rebase autosquash 지원) |
git commit --fixup=<commit> |
--squash |
특정 커밋을 합치는 "squash!" 커밋 생성 (rebase autosquash 지원) |
git commit --squash=<commit> |
--reset-author |
--amend 등과 함께 사용해 author 정보를 현재 committer로 재설정 |
git commit --amend --reset-author |
-F, --file |
지정한 파일의 내용을 커밋 메시지로 사용 | git commit -F msg.txt |
--author |
커밋 작성자(author)를 명시적으로 지정 | git commit --author="Jane Doe <jane@example.com>" |
--date |
커밋의 작성 날짜를 지정된 값으로 설정 | git commit --date="2025-07-26" |
-S, --gpg-sign |
GPG 키로 커밋 서명. 키 ID는 옵션 뒤에 붙여 지정 가능 |
git commit -S 또는 --gpg-sign=<key> |
--no-gpg-sign |
서명 옵션을 무시하고 커밋 생성 (config 우선권 해제) | git commit --no-gpg-sign |
--dry-run |
실제 커밋 없이 어떤 파일이 포함될지 미리 보여줌 | git commit --dry-run |
--verbose, -v |
커밋 메시지 작성 시 변경 diff를 함께 보여줌 | git commit -v |
--status / --no-status |
커밋 메시지 템플릿에 git status 결과 포함 또는 제외 |
git commit --status |
-q, --quiet |
커밋 요약 메시지를 출력하지 않음 | git commit -q -m "..." |
-i, --include |
지정한 경로명만 커밋. staging 인덱스 내용 무시함 |
git commit file1.txt |
-u, --untracked-files |
커밋 메시지 템플릿에 추적되지 않은 파일 보여주기 (mode 지정 가능) |
git commit -u=all |
Commit message convention
- Commit 메시지 작성 시 주제, 변경 내용에 대한 요약, 변경 내용 순서대로 메시지를 작성한다.
<타입>(옵션:모듈): <변경 요약>
<변경 상세 설명> (선택 사항)
feat(login): 로그인 실패 시 메시지 추가
사용자가 로그인에 실패했을 때, 오류 메시지를 UI에 표시하도록 수정함
- 변경 요약은 명령문 형태로, 최대한 간결하게 작성한다.
- ❌
"Fixed login bug" - ✅ "Fix login error when user ID is null"
- ❌
- Commit 메시지 첫 줄은 50자 이내로 작성하는 것이 좋다.
- 본문이 있다면 한 줄 띄고 상세 설명을 작성한다.
메시지 타입
| 타입 | 설명 |
|---|---|
feat |
새로운 기능 추가 |
fix |
버그 수정 |
docs |
문서 수정 (README 등) |
style |
코드 스타일 수정 (세미콜론, 공백 등) |
refactor |
코드 리팩토링 (기능 변화 없음) |
test |
테스트 코드 추가 또는 수정 |
chore |
빌드 설정, 패키지 매니저 설정 등 기타 작업 |
perf |
성능 개선 |
모듈/영역 표기
- 선택적으로 괄호에 어떤 기능/영역에 대한 변경인지 명시한다.
- 예시:
feat(auth): 인증 관련 기능fix(cart): 장바구니 관련 버그 수정docs(readme): README 문서 수정
예시
fix(auth): Prevent null pointer exception on login
Validate that email and password inputs are not null before
processing authentication logic to avoid server errors.
Fixes #456.
docs: Update README with setup and usage
Add instructions for local environment setup, additional
configuration notes, and example usage for new contributors.